package Leetcode第一期;

import java.util.HashMap;
import java.util.Map;

/**
 * @author : K k
 * @date : 16:44 2020/9/15
 * 输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。如果有多对数字的和等于s，则输出任意一对即可。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums = [2,7,11,15], target = 9
 * 输出：[2,7] 或者 [7,2]
 * 示例 2：
 *
 * 输入：nums = [10,26,30,31,47,60], target = 40
 * 输出：[10,30] 或者 [30,10]
 */
public class 和为S的两个数字_57 {
    //HashMap
    public int[] twoSum(int[] nums, int target) {
        if(nums.length==0) {return nums;}
        Map<Integer,Integer> map=new HashMap<>();
        int[] res=new int[2];
        for(int i=0;i<nums.length;i++){
            if(!map.containsKey(nums[i])){
                //存放互补数和 以及原来的数的索引
                map.put(target-nums[i],i);
            }else{
                res[0]=nums[map.get(nums[i])];
                res[1]=i;
            }
        }
        return res;
    }

    //双指针
    public int[] twoSumA(int[] nums, int target) {
        int i=0;
        int j=nums.length-1;

        while (i<j){
            int s = nums[i] + nums[j];
            if(s < target) {i++;}
            else if(s>target){j--;}
            else {
                return new int[]{nums[i],nums[j]};
            }
        }
        return nums;
    }
}
